package br.edu.unilasalle.simon_api.dao.impl;

import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import br.edu.unilasalle.simon_api.dao.IEnderecoEntidadeDao;
import br.edu.unilasalle.simon_api.domain.EnderecoEntidade;

@Repository
public class EnderecoEntidadeDao extends GenericDao<EnderecoEntidade, Long> implements IEnderecoEntidadeDao {
	
	public EnderecoEntidade findEnderecoByCep(String cep) {
		EnderecoEntidade end = null;
		String sql = "select new EnderecoEntidade(o.estado, o.cidade, o.bairro.nome, o.nomeclog) from Endereco o where o.cep = :cep";
        TypedQuery<EnderecoEntidade> q = entityManager.createQuery(sql, EnderecoEntidade.class);
        q.setParameter("cep", cep);
        try {
        	end = q.getSingleResult();
        } catch (NoResultException e) {
        	end = findCidadeByCep(cep);
        }
        end.setCep(cep);
		return end;
    }
	
	private EnderecoEntidade findCidadeByCep(String cep) {
		String sql = "select new EnderecoEntidade(o.estado, o) from Cidade o where o.cep = :cep";
        TypedQuery<EnderecoEntidade> q = entityManager.createQuery(sql, EnderecoEntidade.class);
        q.setParameter("cep", cep);
        try {
        	return q.getSingleResult();
        } catch (NoResultException e) {
        	return new EnderecoEntidade();
        }
	}
	
}
